#include <unistd.h>
#include <sys/wait.h>
#include <cstdio>
#include <cstdlib>

int main()
{
    pid_t pid = fork();
    if (pid == 0)
    {
        printf("I am a child process! pid: %d\n", getpid());
        sleep(5);
        // child
        exit(123);
    }
    // parent
    int status = 0;
    while (true)
    {
        pid_t rid = waitpid(pid, &status, WNOHANG);
        if (rid < 0)
        {
            perror("waitpid()");
            break;
        }
        else if (rid > 0)
        {
            if (WIFEXITED(status))
            {
                printf("wait %d success, 退出码为: %d\n", pid, WEXITSTATUS(status));
            }
            break;
        }
        else
        {
            printf("child process is running! pid: %d\n", getpid());
            sleep(1);
        }
    }

    return 0;
}
// int main()
// {
//     pid_t pid = fork();
//     if (pid == 0)
//     {
//         printf("I am a child process! pid: %d\n", getpid());
//         sleep(3);
//         // child
//         exit(123);
//     }
//     // parent
//     int status = 0;
//     pid_t rid = waitpid(pid, &status, 0);
//     if (rid < 0)
//     {
//         perror("waitpid()");
//     }
//     else
//     {
//         if (WIFEXITED(status))
//         {
//             printf("wait %d success, 退出码为: %d\n", pid, WEXITSTATUS(status));
//         }
//     }
//     return 0;
// }
// int main()
// {
//     pid_t pid = fork();
//     if (pid < 0)
//     {
//         perror("fork");
//         return 0;
//     }
//     else if (pid == 0)
//     {
//         //child
//         printf("I am a child process! pid: %d\n", getpid());
//         sleep(5);
//     }
//     else
//     {
//         //parent
//         printf("I am a parent process! pid: %d\n", getpid());
//         sleep(15);
//     }
//     return 0;
// }